package com.example.github.reflect.demo;

import com.example.github.reflect.entity.Person;

/**
 * 三种方式获取class
 * Class.forName("全类名")：将字节码文件加载进内存，返回 Class 类对象
 * 多用于配置文件，将全类名定义在配置文件中。读取配置文件，加载类
 *
 * 类名.class：通过类名的属性 class 来获取，返回 Class 类对象
 * 多用于参数传递
 *
 * 对象.getClass()：通过对象的 getClass() 方法（在 Object 中定义）来获取，返回 Class 类对象
 * 多用于对象的获取字节码的方式
 */
public class TestPerson {
    public static void main(String[] args) throws Exception {
        // Class.forName("全类名")
        Class<?> aClass = Class.forName("com.example.github.reflect.entity.Person");
        System.out.println("Class.forName ------->" + aClass);

        // 类名class
        Class<Person> personClass1 = Person.class;
        System.out.println("类名class -------->" + personClass1);

        // 实例化对象 getClass()
        Person person = new Person("张三", 18);
        Class<? extends Person> personClass = person.getClass();
        System.out.println("实例化对象 getClass()----->" + personClass);

        System.out.println(aClass == personClass1);
        System.out.println(personClass1 == personClass);

        /*
        Class.forName ------->class com.example.github.reflect.entity.Person
        类名class -------->class com.example.github.reflect.entity.Person
        实例化对象 getClass()----->class com.example.github.reflect.entity.Person
        true
        true
         */
    }
}
